home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / fish / 726-750 / 744 / fo2 / sources_fo2 / proc_fo.c < prev    next >
C/C++ Source or Header  |  1995-03-18  |  3KB  |  114 lines

  1. #include "defs.h"
  2.  
  3. Prototype FO(WORD ac,BYTE *av[]);
  4.  
  5.  
  6. FO(ac,av)
  7. WORD ac;
  8. BYTE *av[];
  9. {
  10. WORD TotalBlocks=0,i=0,j=0,Perr=0;
  11. LONG k=0;
  12. BYTE argn=0,val;
  13. BYTE FileErrName[]={"t:FO2_FileErr0"};
  14.  
  15.     DiskBUSY(av[0],1);
  16.     strncpy(drivebusy,av[0],5);
  17.     while (isInserted(sourceDrive))
  18.     {
  19.         putIText("Insert Source please !              ");
  20.         Delay(10);
  21.     }
  22.  
  23.     FPointer=0;
  24.     VarAdr->inCHIP=(LONG *)AllocMem(512L,MEMF_CHIP|MEMF_CLEAR|MEMF_PUBLIC);
  25.     VarAdr->BuffBitMap=(LONG *)AllocMem(512L,MEMF_CHIP|MEMF_CLEAR|MEMF_PUBLIC);
  26.     Read_WriteB(R,sourceDrive,BBM,880L); /* charge le Root */
  27.     /* on trouve BitMap */
  28.     VarAdr->BitMap=(WORD)((struct RootB *)(VarAdr->BuffBitMap))->BitMapTable[0]; 
  29. #ifdef DEBUG
  30.     printf("n ° du bloc BitMap :%d\n",VarAdr->BitMap);
  31. #endif
  32.     /* on le charge */
  33.     Read_WriteB(R,sourceDrive,BBM,VarAdr->BitMap);
  34.     /* on réserve le buffer de track et on charge le bootBlock oû il faut */
  35.     BT=(LONG *)AllocMem(11*512L,MEMF_CHIP|MEMF_CLEAR|MEMF_PUBLIC);
  36.     Read_WriteB(R,sourceDrive,BT,0L);
  37.     Read_WriteB(R,sourceDrive,BT+128L,1L);
  38.     if (BT[0]==ID_FFS_DISK) FFS=1; else FFS=0;
  39.     if (FFS) puts ("FFS enclenché");
  40. #ifdef DEBUG
  41.     printf("Adr du Buff de Track : %p\n",BT);
  42. #endif
  43.     VarAdr->Empty=(LONG *)AllocMem(512L,MEMF_CLEAR|MEMF_PUBLIC);
  44.     if (VarAdr->Empty==0) Perr++;
  45.     VarAdr->TotalBlocks=HowBlockUsed(BBM);
  46. #ifdef DEBUG
  47.     printf("Total des Blocks Alloués : %d\n",VarAdr->TotalBlocks);
  48. #endif
  49.     VarAdr->TableMem=(LONG *)AllocMem(VarAdr->TotalBlocks*4+4,MEMF_CLEAR|MEMF_PUBLIC);
  50. #ifdef DEBUG
  51.     printf("Adr de TableMem : %p\n",&VarAdr->TableMem);
  52. #endif
  53.     j=0;
  54.     for (i=0;i!=VarAdr->TotalBlocks;i++)
  55.     {
  56.     k=AllocMem(512L,MEMF_CLEAR|MEMF_PUBLIC);
  57.     if (k==0 || (AvailMem(MEMF_PUBLIC) < 20480)) {Perr=103; break;}
  58.     (*VarAdr->TableMem)[j++]=k;
  59.     }
  60.     (*VarAdr->TableMem)[j]=0L;
  61.     VarAdr->EndTMem=j-1;
  62.     
  63.     if (Perr)
  64.     {
  65.         putIText("Sorry, No Memory for that disk      ");
  66.         MtrOff(sourceDrive);
  67.         RendMem();
  68.         return(0);
  69.     }
  70.     /*    On initialise la strucure DiskList */
  71.     dsklist=(struct SinitB*)AllocMem(sizeof(struct SinitB),MEMF_CLEAR|MEMF_PUBLIC);
  72.     dsklist->dl_Bloc=-9;
  73.     ((struct SinitB*)dsklist)->dl_Type=0;
  74.  
  75.     /*    Avec un bloc initial qui ne sert à rien mais est bien pratique */
  76.  
  77.     if (LoadBinMem()) {Aborted(); return(0);}
  78.     MtrOff(sourceDrive);
  79.     if (CHECK)
  80.     {
  81.         putIText("Checking Dos Structure of disk      ");
  82.         FPointer=fopen(FileErrName,"w");
  83.         if (!FPointer) putIText("Can't open t:FO2_FileErr0           ");
  84.         if (CheckDosStruct()==2) {Aborted(); return(0);}
  85.         if (FPointer) {fclose(FPointer); FPointer=0;}
  86.         if (!err)
  87.         {
  88.             putIText("No Error in Dos Structure           ");
  89.             remove(FileErrName);
  90.         }
  91.         else {putIText("ERRORS on disk !! see t:FO2_FileErr "); return(0);}
  92.         Delay(20);
  93.     }
  94.     MtrOff(sourceDrive);
  95.     putIText("Now I optimize ...                  ");
  96.     Optimize();
  97.     BitMap();
  98.     ChangeBlocks();
  99.     do
  100.     {
  101.         if (MemToDisk()==2) {Aborted(); return(0);}
  102.         if (MULTI)
  103.         if (val=WaitChangeDisk(destDrive,-1)==2) {Aborted(); return(0);}
  104.     }
  105.     while (MULTI);
  106.  
  107.     MtrOff(destDrive);
  108.     putIText("Fast Optimization done.             ");
  109.     DiskBUSY(drivebusy,0);
  110.     RendMem();
  111.             
  112.     return(0);
  113. }
  114.